package com.foreknow.proxy;

import java.lang.reflect.Proxy;

public class MyProxyFactory {
    /**
     * 生成JDK动态代理
     * @param obj 目标对象
     * @return
     */
    //讲解文档:https://www.cnblogs.com/leeego-123/p/10995975.html
    public static Object getProxy(Object obj){
        ProxyHandler proxyHandler = new ProxyHandler();
        //设置目标对象
        proxyHandler.setTarget(obj);
        //ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的
        //Class<?>[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型
        //InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),proxyHandler);
    }

}